/*
 * 创建日期 2009-11-27
 *
 * 成都天和软件公司
 * 电话：028-85425861
 * 传真：028-85425861-8008
 * 邮编：610041 
 * 版权所有
 */
package  org.fantasy.common.db;

import  org.fantasy.common.db.bean.ColumnBean;
import  org.fantasy.common.db.bean.ReportRow;
import  org.fantasy.common.db.bean.Row;
import  org.fantasy.common.exception.DBException;

import java.util.List;
import java.util.Map;

import org.dom4j.Document;

/**
 * 查询接口
 * @author: 王文成
 * @version: 1.0
 * @since 2009-11-27
 */
public interface Query {
    
    /**
     * 查询返回List<Row>
     * 
     * @param sql
     * @return
     * @throws DBException
     */
    List<Row> list() throws DBException;
    
    /**
     * 查询返回 XML Document
     * 
     * @param sql
     * @return
     * @throws DBException
     */
    Document xml() throws DBException;
    
    
    /**
     * 查询返回 报表类型数据
     * 
     * @param sql
     * @return
     * @throws DBException
     */
    @Deprecated
    List<ReportRow> report() throws DBException;
    
    /**
     * 查询返回Class指定类型
     * 
     * @param sql
     * @return
     * @throws DBException
     */
    List<? extends Object> list(Class cls) throws DBException;

    /**
     * 查询第一条记录
     * @return
     * @throws DBException
     */
    Row firstRow() throws DBException;
    
    /**
     * 总记录数
     * @return
     * @throws DBException
     */
    int count() throws DBException;
    
    /**
     * 新增、修改、删除
     * @return
     * @throws DBException
     */
    int update() throws DBException;
    
    /**
     * 设置分页
     * @param pageStart
     * @param pageSize
     */
    Query setPage(int pageStart,int pageSize);
    
    /**
     * 设置参数
     * @param name
     * @param value
     */
    Query setParam(String name , Object value );
    
    /**
     * 设置参数
     * @param name
     * @param value
     */
    Query setParamMap( Map<String,Object> paramMap );
    
    /**
     *重置参数
     */
    void reset();
    
    /**
     * 取得运行时SQL
     * @return
     */
    String getRuntimeSql();
    
    /**
     * 设置计算总数规则
     */
    Query setCountType(String type);
    
    /**
     * 取得列数据
     * @return
     */
    List<ColumnBean> getColumns() throws DBException;
}
